package cz.vse.integrace.iag.db;

import java.util.List;
import javax.annotation.PostConstruct;
import com.google.api.client.auth.oauth2.draft10.AccessTokenResponse;

/**
 * Rozhraní pro přístup do dababáze. 
 * 
 * @author David Nejedly
 */
public interface ZamestnanciDAO {

    /**
     * Metoda, která proběhne po zkonstorování objektu implemtující toto 
     * rozhraní.
     */
    @PostConstruct
    void init();

    /**
     * Metoda načítá všechny zaměstnance z databáze a vytváří jejich objekty.
     * Pokud není nalezen žádný zaměstnanec je vráceno null.
     * 
     * @return zaměstnanci v databázi
     */
    public List<Zamestnanec> getZamestnance();

    /**
     * Metoda vrací zaměstnace z databáze, podle jeho jména a přímení.
     * 
     * @param jmeno jméno zaměstnance
     * @param prijmeni příjmení zaměstnance
     * @return objekt zaměstnance nebo null, když není nalezen
     */
    public Zamestnanec getZamestnanec(String jmeno, String prijmeni);

    /**
     * Metoda vrací zaměstnace z databáze, podle jeho jména a přímení.
     * 
     * @param zamestneckeCislo číslo zaměstnance
     * @return objekt zaměstnance nebo null, když není nalezen
     */
    public Zamestnanec getZamestnanec(int zamestneckeCislo);

    /**
     * Metoda načítá všechny oddělení z databáze. Pokud není nalezeno žádné
     * oddělení je vráceno null.
     * 
     * @return seznam oddělení
     */
    public List<Oddeleni> getOddeleni();

    /**
     * Metoda načítá oddělení podle čísla oddělení. Pokud oddělení není nalezeno
     * je vráceno null.
     * 
     * @param cisloOdeleni číslo oddělení
     * @return objekt oddělení
     */
    public Oddeleni getOddeleni(int cisloOdeleni);

    /**
     * Ukládá zadaný AccessTokenResponse pro OAuht k zaměstnaci, 
     * podle jeho zaměstnaneckého čísla.
     * 
     * @param tokens The AccessTokenResponse to store
     * @param userName The userName associated wit the token
     */
    public void ulozToken(AccessTokenResponse tokens, Integer zamId);

    /**
     * Vrací AccessTokenResponse pro zadané číslo zaměstnance. Pokud není nalezen
     * je vráceno null.
     *
     * @param zamId zaměstnanecké číslo pro hledaná token
     * @return AccessTokenResponse pro zadané zaměstnanecé číslo
     */
    public AccessTokenResponse getToken(Integer zamId);

    /**
     * Metoda ukládá zaměstnance do databáze. 
     * 
     * @param zamestnanec zaměstnanec k uložení
     * @return true, pokud se uložení zdařilo, jinak null
     */
    public boolean ulozZamestnance(Zamestnanec zamestnanec);

    /**
     * Metoda ukládá oddělení do databáze.
     * 
     * @param oddeleni oddělení k uložení
     * @return true, pokud se uložení zdařilo, jinak null
     */
    public boolean ulozOddeleni(Oddeleni oddeleni);
}
